/*	$OpenBSD: trap.c,v 1.3 2014/04/18 14:38:21 guenther Exp $	*/

/*
 * Simple test program to check what happens when userland tries to trap.
 * Written by Miodrag Vallat 2003 AD -- public domain
 */

#include <stdio.h>

#define	TRAP(num) \
	case num: \
		__asm__ volatile ("tb0 0, %r0, " __STRING(num) ); \
		break;

int
main(int argc, char *argv[])
{
	int trapnum = 503;	/* software divide by zero */

	if (argc > 1)
		trapnum = atoi(argv[1]);

	switch (trapnum) {
TRAP(0x000)
TRAP(0x001)
TRAP(0x002)
TRAP(0x003)
TRAP(0x004)
TRAP(0x005)
TRAP(0x006)
TRAP(0x007)
TRAP(0x008)
TRAP(0x009)
TRAP(0x00a)
TRAP(0x00b)
TRAP(0x00c)
TRAP(0x00d)
TRAP(0x00e)
TRAP(0x00f)
TRAP(0x010)
TRAP(0x011)
TRAP(0x012)
TRAP(0x013)
TRAP(0x014)
TRAP(0x015)
TRAP(0x016)
TRAP(0x017)
TRAP(0x018)
TRAP(0x019)
TRAP(0x01a)
TRAP(0x01b)
TRAP(0x01c)
TRAP(0x01d)
TRAP(0x01e)
TRAP(0x01f)
TRAP(0x020)
TRAP(0x021)
TRAP(0x022)
TRAP(0x023)
TRAP(0x024)
TRAP(0x025)
TRAP(0x026)
TRAP(0x027)
TRAP(0x028)
TRAP(0x029)
TRAP(0x02a)
TRAP(0x02b)
TRAP(0x02c)
TRAP(0x02d)
TRAP(0x02e)
TRAP(0x02f)
TRAP(0x030)
TRAP(0x031)
TRAP(0x032)
TRAP(0x033)
TRAP(0x034)
TRAP(0x035)
TRAP(0x036)
TRAP(0x037)
TRAP(0x038)
TRAP(0x039)
TRAP(0x03a)
TRAP(0x03b)
TRAP(0x03c)
TRAP(0x03d)
TRAP(0x03e)
TRAP(0x03f)
TRAP(0x040)
TRAP(0x041)
TRAP(0x042)
TRAP(0x043)
TRAP(0x044)
TRAP(0x045)
TRAP(0x046)
TRAP(0x047)
TRAP(0x048)
TRAP(0x049)
TRAP(0x04a)
TRAP(0x04b)
TRAP(0x04c)
TRAP(0x04d)
TRAP(0x04e)
TRAP(0x04f)
TRAP(0x050)
TRAP(0x051)
TRAP(0x052)
TRAP(0x053)
TRAP(0x054)
TRAP(0x055)
TRAP(0x056)
TRAP(0x057)
TRAP(0x058)
TRAP(0x059)
TRAP(0x05a)
TRAP(0x05b)
TRAP(0x05c)
TRAP(0x05d)
TRAP(0x05e)
TRAP(0x05f)
TRAP(0x060)
TRAP(0x061)
TRAP(0x062)
TRAP(0x063)
TRAP(0x064)
TRAP(0x065)
TRAP(0x066)
TRAP(0x067)
TRAP(0x068)
TRAP(0x069)
TRAP(0x06a)
TRAP(0x06b)
TRAP(0x06c)
TRAP(0x06d)
TRAP(0x06e)
TRAP(0x06f)
TRAP(0x070)
TRAP(0x071)
TRAP(0x072)
TRAP(0x073)
TRAP(0x074)
TRAP(0x075)
TRAP(0x076)
TRAP(0x077)
TRAP(0x078)
TRAP(0x079)
TRAP(0x07a)
TRAP(0x07b)
TRAP(0x07c)
TRAP(0x07d)
TRAP(0x07e)
TRAP(0x07f)
TRAP(0x080)
TRAP(0x081)
TRAP(0x082)
TRAP(0x083)
TRAP(0x084)
TRAP(0x085)
TRAP(0x086)
TRAP(0x087)
TRAP(0x088)
TRAP(0x089)
TRAP(0x08a)
TRAP(0x08b)
TRAP(0x08c)
TRAP(0x08d)
TRAP(0x08e)
TRAP(0x08f)
TRAP(0x090)
TRAP(0x091)
TRAP(0x092)
TRAP(0x093)
TRAP(0x094)
TRAP(0x095)
TRAP(0x096)
TRAP(0x097)
TRAP(0x098)
TRAP(0x099)
TRAP(0x09a)
TRAP(0x09b)
TRAP(0x09c)
TRAP(0x09d)
TRAP(0x09e)
TRAP(0x09f)
TRAP(0x0a0)
TRAP(0x0a1)
TRAP(0x0a2)
TRAP(0x0a3)
TRAP(0x0a4)
TRAP(0x0a5)
TRAP(0x0a6)
TRAP(0x0a7)
TRAP(0x0a8)
TRAP(0x0a9)
TRAP(0x0aa)
TRAP(0x0ab)
TRAP(0x0ac)
TRAP(0x0ad)
TRAP(0x0ae)
TRAP(0x0af)
TRAP(0x0b0)
TRAP(0x0b1)
TRAP(0x0b2)
TRAP(0x0b3)
TRAP(0x0b4)
TRAP(0x0b5)
TRAP(0x0b6)
TRAP(0x0b7)
TRAP(0x0b8)
TRAP(0x0b9)
TRAP(0x0ba)
TRAP(0x0bb)
TRAP(0x0bc)
TRAP(0x0bd)
TRAP(0x0be)
TRAP(0x0bf)
TRAP(0x0c0)
TRAP(0x0c1)
TRAP(0x0c2)
TRAP(0x0c3)
TRAP(0x0c4)
TRAP(0x0c5)
TRAP(0x0c6)
TRAP(0x0c7)
TRAP(0x0c8)
TRAP(0x0c9)
TRAP(0x0ca)
TRAP(0x0cb)
TRAP(0x0cc)
TRAP(0x0cd)
TRAP(0x0ce)
TRAP(0x0cf)
TRAP(0x0d0)
TRAP(0x0d1)
TRAP(0x0d2)
TRAP(0x0d3)
TRAP(0x0d4)
TRAP(0x0d5)
TRAP(0x0d6)
TRAP(0x0d7)
TRAP(0x0d8)
TRAP(0x0d9)
TRAP(0x0da)
TRAP(0x0db)
TRAP(0x0dc)
TRAP(0x0dd)
TRAP(0x0de)
TRAP(0x0df)
TRAP(0x0e0)
TRAP(0x0e1)
TRAP(0x0e2)
TRAP(0x0e3)
TRAP(0x0e4)
TRAP(0x0e5)
TRAP(0x0e6)
TRAP(0x0e7)
TRAP(0x0e8)
TRAP(0x0e9)
TRAP(0x0ea)
TRAP(0x0eb)
TRAP(0x0ec)
TRAP(0x0ed)
TRAP(0x0ee)
TRAP(0x0ef)
TRAP(0x0f0)
TRAP(0x0f1)
TRAP(0x0f2)
TRAP(0x0f3)
TRAP(0x0f4)
TRAP(0x0f5)
TRAP(0x0f6)
TRAP(0x0f7)
TRAP(0x0f8)
TRAP(0x0f9)
TRAP(0x0fa)
TRAP(0x0fb)
TRAP(0x0fc)
TRAP(0x0fd)
TRAP(0x0fe)
TRAP(0x0ff)
TRAP(0x100)
TRAP(0x101)
TRAP(0x102)
TRAP(0x103)
TRAP(0x104)
TRAP(0x105)
TRAP(0x106)
TRAP(0x107)
TRAP(0x108)
TRAP(0x109)
TRAP(0x10a)
TRAP(0x10b)
TRAP(0x10c)
TRAP(0x10d)
TRAP(0x10e)
TRAP(0x10f)
TRAP(0x110)
TRAP(0x111)
TRAP(0x112)
TRAP(0x113)
TRAP(0x114)
TRAP(0x115)
TRAP(0x116)
TRAP(0x117)
TRAP(0x118)
TRAP(0x119)
TRAP(0x11a)
TRAP(0x11b)
TRAP(0x11c)
TRAP(0x11d)
TRAP(0x11e)
TRAP(0x11f)
TRAP(0x120)
TRAP(0x121)
TRAP(0x122)
TRAP(0x123)
TRAP(0x124)
TRAP(0x125)
TRAP(0x126)
TRAP(0x127)
TRAP(0x128)
TRAP(0x129)
TRAP(0x12a)
TRAP(0x12b)
TRAP(0x12c)
TRAP(0x12d)
TRAP(0x12e)
TRAP(0x12f)
TRAP(0x130)
TRAP(0x131)
TRAP(0x132)
TRAP(0x133)
TRAP(0x134)
TRAP(0x135)
TRAP(0x136)
TRAP(0x137)
TRAP(0x138)
TRAP(0x139)
TRAP(0x13a)
TRAP(0x13b)
TRAP(0x13c)
TRAP(0x13d)
TRAP(0x13e)
TRAP(0x13f)
TRAP(0x140)
TRAP(0x141)
TRAP(0x142)
TRAP(0x143)
TRAP(0x144)
TRAP(0x145)
TRAP(0x146)
TRAP(0x147)
TRAP(0x148)
TRAP(0x149)
TRAP(0x14a)
TRAP(0x14b)
TRAP(0x14c)
TRAP(0x14d)
TRAP(0x14e)
TRAP(0x14f)
TRAP(0x150)
TRAP(0x151)
TRAP(0x152)
TRAP(0x153)
TRAP(0x154)
TRAP(0x155)
TRAP(0x156)
TRAP(0x157)
TRAP(0x158)
TRAP(0x159)
TRAP(0x15a)
TRAP(0x15b)
TRAP(0x15c)
TRAP(0x15d)
TRAP(0x15e)
TRAP(0x15f)
TRAP(0x160)
TRAP(0x161)
TRAP(0x162)
TRAP(0x163)
TRAP(0x164)
TRAP(0x165)
TRAP(0x166)
TRAP(0x167)
TRAP(0x168)
TRAP(0x169)
TRAP(0x16a)
TRAP(0x16b)
TRAP(0x16c)
TRAP(0x16d)
TRAP(0x16e)
TRAP(0x16f)
TRAP(0x170)
TRAP(0x171)
TRAP(0x172)
TRAP(0x173)
TRAP(0x174)
TRAP(0x175)
TRAP(0x176)
TRAP(0x177)
TRAP(0x178)
TRAP(0x179)
TRAP(0x17a)
TRAP(0x17b)
TRAP(0x17c)
TRAP(0x17d)
TRAP(0x17e)
TRAP(0x17f)
TRAP(0x180)
TRAP(0x181)
TRAP(0x182)
TRAP(0x183)
TRAP(0x184)
TRAP(0x185)
TRAP(0x186)
TRAP(0x187)
TRAP(0x188)
TRAP(0x189)
TRAP(0x18a)
TRAP(0x18b)
TRAP(0x18c)
TRAP(0x18d)
TRAP(0x18e)
TRAP(0x18f)
TRAP(0x190)
TRAP(0x191)
TRAP(0x192)
TRAP(0x193)
TRAP(0x194)
TRAP(0x195)
TRAP(0x196)
TRAP(0x197)
TRAP(0x198)
TRAP(0x199)
TRAP(0x19a)
TRAP(0x19b)
TRAP(0x19c)
TRAP(0x19d)
TRAP(0x19e)
TRAP(0x19f)
TRAP(0x1a0)
TRAP(0x1a1)
TRAP(0x1a2)
TRAP(0x1a3)
TRAP(0x1a4)
TRAP(0x1a5)
TRAP(0x1a6)
TRAP(0x1a7)
TRAP(0x1a8)
TRAP(0x1a9)
TRAP(0x1aa)
TRAP(0x1ab)
TRAP(0x1ac)
TRAP(0x1ad)
TRAP(0x1ae)
TRAP(0x1af)
TRAP(0x1b0)
TRAP(0x1b1)
TRAP(0x1b2)
TRAP(0x1b3)
TRAP(0x1b4)
TRAP(0x1b5)
TRAP(0x1b6)
TRAP(0x1b7)
TRAP(0x1b8)
TRAP(0x1b9)
TRAP(0x1ba)
TRAP(0x1bb)
TRAP(0x1bc)
TRAP(0x1bd)
TRAP(0x1be)
TRAP(0x1bf)
TRAP(0x1c0)
TRAP(0x1c1)
TRAP(0x1c2)
TRAP(0x1c3)
TRAP(0x1c4)
TRAP(0x1c5)
TRAP(0x1c6)
TRAP(0x1c7)
TRAP(0x1c8)
TRAP(0x1c9)
TRAP(0x1ca)
TRAP(0x1cb)
TRAP(0x1cc)
TRAP(0x1cd)
TRAP(0x1ce)
TRAP(0x1cf)
TRAP(0x1d0)
TRAP(0x1d1)
TRAP(0x1d2)
TRAP(0x1d3)
TRAP(0x1d4)
TRAP(0x1d5)
TRAP(0x1d6)
TRAP(0x1d7)
TRAP(0x1d8)
TRAP(0x1d9)
TRAP(0x1da)
TRAP(0x1db)
TRAP(0x1dc)
TRAP(0x1dd)
TRAP(0x1de)
TRAP(0x1df)
TRAP(0x1e0)
TRAP(0x1e1)
TRAP(0x1e2)
TRAP(0x1e3)
TRAP(0x1e4)
TRAP(0x1e5)
TRAP(0x1e6)
TRAP(0x1e7)
TRAP(0x1e8)
TRAP(0x1e9)
TRAP(0x1ea)
TRAP(0x1eb)
TRAP(0x1ec)
TRAP(0x1ed)
TRAP(0x1ee)
TRAP(0x1ef)
TRAP(0x1f0)
TRAP(0x1f1)
TRAP(0x1f2)
TRAP(0x1f3)
TRAP(0x1f4)
TRAP(0x1f5)
TRAP(0x1f6)
TRAP(0x1f7)
TRAP(0x1f8)
TRAP(0x1f9)
TRAP(0x1fa)
TRAP(0x1fb)
TRAP(0x1fc)
TRAP(0x1fd)
TRAP(0x1fe)
TRAP(0x1ff)
	default:
		printf("invalid trap number %x\n", trapnum);
		return 1;
	}

	return 0;
}
